package com.ss.SmartStock.redis;

import com.ss.SmartStock.service.ProductService;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

import javax.annotation.Resource;

public class ExpiredKeySubscriber extends JedisPubSub {

    @Resource
    private ProductService productService;

    @Override
    public void onPMessage(String pattern, String channel, String message) {
        // 判断是哪个前缀的键过期了
        if (message.startsWith("product_id_on")) {
            // 处理在线商品ID过期逻辑
            // 解析消息以获取商品ID（这里假设键名格式是"product_id_<id>"）
            Long productId = Long.valueOf(message.replace("product_id_on", ""));
            productService.putProductOnline(productId);

        } else if (message.startsWith("product_id_off")) {
            Long productId = Long.valueOf(message.replace("product_id_off", ""));

            // 处理离线商品ID过期逻辑

            productService.takeProductOffline(productId);
        }
    }

    public static void main(String[] args) {  
        Jedis jedis = new Jedis("localhost"); // 使用你的Redis地址和端口  
        ExpiredKeySubscriber subscriber = new ExpiredKeySubscriber();  
        jedis.psubscribe(subscriber, "__keyevent@0__:expired"); // 订阅0号数据库的过期事件  
        // 注意：这个main方法会阻塞，直到你中断它。在实际应用中，你可能需要在一个单独的线程中运行这个订阅者。  
    }  
}